package com.zhku.service.impl;

import ch.qos.logback.core.joran.util.beans.BeanUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhku.entity.User;
import com.zhku.entity.UserVO;
import com.zhku.service.IUserService;
import com.zhku.service.QRService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.io.IOException;

/**
 * @BelongsProject: SpringBoot_School_Work
 * @BelongsPackage: com.zhku.service.impl
 * @Author: "deweyMDH"
 * @CreateTime: 2023-04-06  10:15
 * @Version: 1.0
 */
@Service
public class QRServiceImpl implements QRService {

    // 从容器获取二维码配置的对象
    @Resource
    QrConfig qrConfig;

    @Autowired
    IUserService userService;

    // userid 是一个用户信息
    @Override
    public void generateStream(Long userid, HttpServletResponse response) throws IOException {
        // 获取相应的用户信息
        User user = userService.getById(userid);
        // 根据user的通行码，设置颜色
        if (user.getUserInfo().getStatus() == 0) {   // 绿码
            // 设置当前通行码的背景颜色
            qrConfig.setBackColor(Color.green.getRGB());
        } else if (user.getUserInfo().getStatus() == 1) {    // 黄码
            qrConfig.setBackColor(Color.yellow.getRGB());
        } else {    // 红码
            qrConfig.setBackColor(Color.red.getRGB());
        }

        // 使用jackson，把user转成json
        ObjectMapper objectMapper = new ObjectMapper();
        // 把数据存放在UserVO中,利用spring的beanUtils，可以自动复制同名的变量
        UserVO userVO = new UserVO();
        BeanUtils.copyProperties(user, userVO);
        BeanUtils.copyProperties(user.getUserInfo(), userVO);

        // 使用QrCodeUtil 生成二维码的图片流
        // 有一个有意思的现象，当二维码的内的信息越多的时候，二维码会越复杂
        QrCodeUtil.generate(objectMapper.writeValueAsString(userVO), qrConfig, "png", response.getOutputStream());
    }
}
